Bulk memory may be used inefficiently, with a significant amount of memory containing old data sitting idle that cannot be reused. Bulk memory includes off system-on-a-chip (SoC) memory, such as double data rate (DDR) memory and flash memory, and large, on-SoC memory storage, such as synchronous dynamic random access memory (SRAM) or embedded dynamic random access memory (DRAM). Bulk memory may be used to simply hold bits of data. In bulk memory, all bits may be treated similarly, and are first written to and possibly later read out. Data may be multiply buffered to meet real-time throughput and latency constraints during processing, leading to significant power and area usage. Global memory maps of all available bulk memories and organizations may be used by some technologies. Also, in bulk memory, the location of data may be statically determined. Manual optimization of memory usage via overlays of data may be used in real-time embedded systems. However, manual optimization may be difficult and time consuming to create, and may have poor code reuse properties. Optimizing bulk memory in advance may be problematic, because the memory usage pattern may not be known in advance. Also, updating bulk memory may be expensive. Global memory mapping is tedious, and makes assumptions about future usage. Additionally, global memory mapping may lead to holes, in which common addresses are shared, but data paths are not shared.
In the information technology (IT) domain, the concept of data warehouse may be used. However, IT data warehouses are poorly suited for information and communications technology (ICT). IT data warehouses, such as Hadoop, have a primary focus on handling a large volume of data and efficient storage and retrieval of disk-like media. IT data warehouses have modularity and isolation. IT might not have significant real-time requirements. In ICT, storage and data handling requirements are highly sensitive to latency, throughput, and data organization.